#ifndef FENETRE_H
#define FENETRE_H

#include<QMainWindow>
#include<QLineEdit>
#include<QFormLayout>
#include<QBoxLayout>
#include<QTableWidget>
#include<QWidget>
#include"boutonOriente.h"
#include<QRect>
#include<QPoint>
#include<QGroupBox>
#include<QRadioButton>
#include<QCheckBox>
#include<QLabel>
#include<QMouseEvent>
#include<QTableView>
#include<QStandardItemModel>
#include<QListWidget>
#include<QDialog>
#include<QMessageBox>
#include"./controleur/controleur.h"



class BoiteDialog;
class DialogAjout;
class Edt;

class Fenetre: public QWidget
{ Q_OBJECT
public:
    QTabWidget* getTabWidget() const;
    void setTaille(QSize t);
    QSize getTaille() const;
    void setPosition(QPoint p);
    QPoint getPosition() const;
    void centrer();
    void centrerHorizontalement();
    Controleur *getControleur();
    BoiteDialog* getBoiteDialog();

    OrientationButton* getBoutonModif();
    void CheckExpended(QModelIndex index);
    void getAnswerEns(QModelIndex index);
    void getAnswerSalle(QModelIndex index);
    void getAnswerModule(QModelIndex index);
    void getAnswerGroupe(QModelIndex index);
    Fenetre();
    ~Fenetre();

public slots:
    /*commun*/
    void getData(QModelIndex index);
    void setCreate(QModelIndex index);
    /*création des différentes parties*/
    void creerEnseignant();
    void razEns();
    void creerEtudiant();
    void razEtu();
    void creerSalle();
    void razSalle();
    void creerModule();
    void razModule();
    void creerGroupe();
    void razGroupe();
    void creerCreneau();
    void razCreneau();
    /*modification des différentes parties*/
    void modifEnseignant();
    void supprEnseignant();
    void modifEtudiant();
    void supprEtudiant();
    void modifSalle();
    void supprSalle();
    void supprModule();
    void supprGroupe();
    //bouton de modification
    void afficheModifLayout(bool b);
    //changement d'onglet
    void changeTab(int i);
    //changement d'option
    void changeOptionTD();
    void changeOptionTP();
    void changeOptionCM();
    //ajout d'enseignant dans module
    void ajoutEnseignant();
    //ajout de salle dans creneau
    void ajoutSalle();
    //ajout de module dans creneau
    void ajoutModule();
    //ajout de groupe dans creneau
    void ajoutGroupe();
    //récupération de contenu sélectionné
    void getAnswer(QModelIndex index);
    //récupération de contenu pour modification
    void getDataEns(QModelIndex index);
    void getDataEtu(QModelIndex index);
    void getDataSalle(QModelIndex index);
    void getDataModule(QModelIndex index);
    void getDataGroupe(QModelIndex index);
    //repasser en création
    void setCreateEns(QModelIndex index);
    void setCreateEtu(QModelIndex index);
    void setCreateSalle(QModelIndex index);
    void setCreateModule(QModelIndex index);
    void setCreateGroupe(QModelIndex index);

private:
    /*controleur*/
    Controleur control_;
    /*boite de dialog*/
    BoiteDialog* dialogModif_;
    DialogAjout* dia_;
    /*taille de la fenêtre*/
    QSize taille_;
    /*position de la fenetre*/
    QPoint pos_;
    //Définition du layout principal
    QHBoxLayout* layoutPrincipal_;
    //definition du bouton de modification
    OrientationButton* boutonModifier_;
        /*définition des onglets*/
        QTabWidget* onglets_;
        QWidget* page1_;
        QWidget* page2_;
        QWidget* page3_;
        QWidget* page4_;
        QWidget* page5_;
        QWidget* page6_;
            /*définition du conteneur de la page 1*/
            QVBoxLayout* vBoxEtu_;
                /*définition du formulaire pour les étudiants*/
                QFormLayout* formEtu_;
                    /*définition du contenu du formulaire*/
                    QLineEdit* noEtu_;
                    QLineEdit* nomEtu_;
                    QLineEdit* prenomEtu_;
                    QLineEdit* adrPostEtu_;
                    QLineEdit* adrElecEtu_;
                /*définition d'une grille*/
                QGridLayout* ButtonValidEtuLayout_;
                    /*définition des boutons de création et d'anulation*/
                    QPushButton* createEtu_;
                    QPushButton* resetEtu_;
                    /*définition des boutons de modifications et de suppression*/
                    QPushButton* modifEtu_;
                    QPushButton* supprimerEtu_;

            /*definition du conteneur de la page 2*/
            QVBoxLayout* vBoxEns_;
                /*definition du formulaire pour les enseignants*/
                QFormLayout* formEns_;
                    /*définition du contenu du formulaire*/
                    QLineEdit* noEns_;
                    QLineEdit* nomEns_;
                    QLineEdit* prenomEns_;
                    QLineEdit* adrPostEns_;
                    QLineEdit* adrElecEns_;
                /*définition d'une grille*/
                QGridLayout* ButtonValidEnsLayout_;
                    /*définition des boutons de création et d'annulation*/
                    QPushButton* createEns_;
                    QPushButton* resetEns_;
                    /*définition des boutons de modifications*/
                    QPushButton* modifEns_;
                    QPushButton* supprimerEns_;



            /*définition du conteneur de la page 3*/
            QVBoxLayout* vBoxSalle_;
                /*definition du formulaire pour les salles*/
                QFormLayout* formSalle_;
                    /*définition du contenu du formulaire*/
                    QLineEdit* noSalle_;
                    QLineEdit* capacite_;
                /*définition du choix de type de salle*/
                QGroupBox* choixType_;
                    /*definition du conteneur des boutons*/
                    QHBoxLayout* choixTypeLayout_;
                    /*définition des boutons*/
                    QRadioButton* radioTypeCM_;
                    QRadioButton* radioTypeTD_;
                    QRadioButton* radioTypeTP_;

                    /*définition du conteneur des options*/
                    QHBoxLayout* choixDispoLayout_;
                    /*Définition des options*/
                    QCheckBox* checkVideoProj_;
                    QCheckBox* checkVisioConf_;
                    QLineEdit* nbMachine_;

                /*définition d'une grille*/
                QGridLayout* ButtonValidSalleLayout_;
                    /*définition des boutons de création et d'annulation*/
                    QPushButton* createSalle_;
                    QPushButton* resetSalle_;
                    /*définition des boutons de modification et de suppression*/
                    QPushButton* modifSalle_;
                    QPushButton* supprimerSalle_;

            /*défintion du conteneur de la page 4*/
            QVBoxLayout* vBoxModule_;
                /*définition du formulaire pour les modules*/
                QFormLayout* formMod_;
                    /*définition du contenu du formulaire*/
                    QLineEdit* idMod_;
                    QLineEdit* titreMod_;
                /*définition du conteneur de choix d'horaires*/
                QGridLayout* choixHeures_;
                    /*définition du contenu du layout*/
                    QLineEdit* nbHCM_;
                    QLineEdit* nbHTD_;
                    QLineEdit* nbHTP_;
                    QLabel* labHCM_;
                    QLabel* labHTD_;
                    QLabel* labHTP_;
                /*définition du layout d'affichage des enseignant existant*/
                    QHBoxLayout* ajoutEnsLayout_;
                    QLabel* idEnsLabel_;
                    QLabel* nomEnsLabel_;
                    QLabel* prenomEnsLabel_;
                    Enseignant* ensModule_;
                    QPushButton* ajoutEns_;

                    /*définition d'une grille*/
                    QGridLayout* ButtonValidModuleLayout_;
                        /*définition des boutons de créations et d'annulation*/
                        QPushButton* createModule_;
                        QPushButton* resetModule_;
                        /*définition des boutons de modification et d'ajout*/
                        QPushButton* modifModule_;
                        QPushButton* supprModule_;

            //definition du conteneur de la page 5
            QVBoxLayout* vBoxGroupe_;
                /*définition du formlaire pour les groupes*/
                QFormLayout* formGrp_;
                    /*définition du contenu du formulaire*/
                    QLineEdit* nomGrp_;
                /*définition du bouton d'ajout d'étudiants et de modules*/
                QPushButton* addGrpMod_;
                /*définition d'une grille*/
                QGridLayout* ButtonValidGroupeLayout_;
                    /*définition des boutons de créations et d'annulation*/
                    QPushButton* createGrp_;
                    QPushButton* resetGrp_;
                    /*définition des boutons de modification et de suppression*/
                    QPushButton* modifGrp_;
                    QPushButton* supprGrp_;

            /*définition du conteneur de la page 6*/
            QVBoxLayout* vBoxCreneau_;

            /*définition du formulaire*/
            QFormLayout* formCreneau_;
                /*définition du contenu du formulaire*/
                QLineEdit* dateEdit_;
                QLineEdit* heureEdit_;

            /*définition d'une grille d'ajout*/
                QGridLayout* ajoutLayoutCre_;
                    /*définition du contenu de la grille*/
                    QLabel* numSalleCre_;
                    QLabel* nomGrpCre_;
                    QLabel* idModCre_;
                    Salle* salleCre_;
                    Groupe* grpCre_;
                    Module* modCre_;
                    QPushButton* ajoutSalle_;
                    QPushButton* ajoutGroupe_;
                    QPushButton* ajoutModule_;

            /*définition de la grille de validation*/
                QGridLayout* ButtonValidCreneauLayout_;
                /*définition des boutons de créations et d'annulation*/
                QPushButton* createCreneau_;
                QPushButton* resetCreneau_;
                /*définition des boutons de modification et de suppression*/
                QPushButton* modifCreneau_;
                QPushButton* supprCreneau_;


            //ACCEDER A L EDT
                //definition du conteneur du bouton d acces a l EDT
                    QVBoxLayout* vBoxAccesEDT_;
                //definition du bouton d acces a l EDT
                    QPushButton* boutonAccesEDT_;
                    Edt* fenetreEDT_;
};
#endif
